import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import {addRou} from "./router/addRoute"
import {regRou} from "./router/regRoute"
// import echarts from 'echarts'; //echarts5以下可以使用，如果是5及5以上的版本，这种引入会报错
import * as echarts from 'echarts'; //echarts5及以上的引入方式

Vue.config.productionTip = false
Vue.use(ElementUI);
//  map  filter  some  every forEach 
Vue.prototype.$echarts = echarts //echarts 挂载到Vue的原型对象中，方便在Vue的各个实例组件中使用

// 全局前置守卫
router.beforeEach((to,from,next)=>{
  if(to.path != "/login"){
    const token = localStorage.getItem("token");
    if(token){
      // 校验已经存在的路由中是否有要跳转到的路径，如果存在则直接放行，如果不存在则动态获取并添加路由信息
      if(regRou(to)){ 
        return next() 
      }
      // 获取菜单列表
      store.dispatch("setMenuList").then(()=>{
        addRou(store.getters.getMenuList)
        return next({path:to.fullPath}) // 重新指定路由跳转路径，这样会重新触发路由守卫，这里面的代码会重新执行，当重新执行后，路由表中就已经存在当前要跳转的路径，这时候就可以直接进入跳转
    })
    }else{
     return next("/login")
    }
  }else{
    return next()
  }
})
// 全局后置守卫
router.afterEach(()=>{
  document.title = router.currentRoute.meta.title
})


new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')


// 递归函数 ： 一个函数的内部调用该函数本身，并且有一个终止条件，则这个函数被称之为递归函数

// let a = 10
// function fn(){
//    a--
//    if(a < 0){
//     return a
//    }else{
//     fn()
//    }  
// }
// fn()


